package com.ctcemti.mdm.common.util;

import java.io.*;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;

import org.springframework.web.multipart.MultipartFile;

/**
 * @author 管如明 E-mail: guanruming@youotech.com
 * @version 创建时间：2018年2月2日 上午10:43:01
 * 类说明
 */
public class FileUtil {

    /**
     * 
    * @Function: FileUtil.java
    * @Description: 获取文件byte数组
    * @param: pathStr 文件路径
    * @return：返回结果描述
    * @throws：异常描述
    * @version: v1.0.0
    * @author: GuanRuming Email:guanruming@youotech.com
    * @date: 2018年5月18日 下午5:00:05
    * 
    * Modification History:
    * Date         Author          Version            Description
    *---------------------------------------------------------*
    * 2018年5月18日     Administrator           v1.0.0               修改原因
     */
    public static byte[] getBytesByFile(String pathStr) {
        File file = new File(pathStr);
        try {
            FileInputStream fis = new FileInputStream(file);
            ByteArrayOutputStream bos = new ByteArrayOutputStream(1000);
            byte[] b = new byte[1000];
            int n;
            while ((n = fis.read(b)) != -1) {
                bos.write(b, 0, n);
            }
            fis.close();
            byte[] data = bos.toByteArray();
            bos.close();
            return data;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * 
    * @Function: FileUtil.java
    * @Description: 将byte数组转换成文件
    * @param: bytes 需要转换的byte数组
    * @param: filePath 文件路径
    * @param: fileName 文件名
    * @return：返回结果描述
    * @throws：异常描述
    * @version: v1.0.0
    * @author: GuanRuming Email:guanruming@youotech.com
    * @date: 2018年5月18日 下午5:00:49
    * 
    * Modification History:
    * Date         Author          Version            Description
    *---------------------------------------------------------*
    * 2018年5月18日     Administrator           v1.0.0               修改原因
     */
    public static void getFileByBytes(byte[] bytes, String filePath, String fileName) {
        BufferedOutputStream bos = null;
        FileOutputStream fos = null;
        File file = null;
        try {
            File dir = new File(filePath);
            // 判断文件目录是否存在
            if (!dir.exists()) {
                dir.mkdirs();
            }
            file = new File(filePath + "\\" + fileName);
            fos = new FileOutputStream(file);
            bos = new BufferedOutputStream(fos);
            bos.write(bytes);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (bos != null) {
                try {
                    bos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (fos != null) {
                try {
                    fos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
    
    /** 
     *  根据路径删除指定的目录或文件，无论存在与否 
     *@param filePath  要删除的目录或文件
     *@return 删除成功返回 true，否则返回 false。 
     */  
    public static boolean deleteFile(String filePath) {  
        Boolean flag = false;  
        File file = new File(filePath);  
        // 判断目录或文件是否存在  
        if (!file.exists()) {
        	// 不存在返回 false 
            return flag;
        } else {  
            // 判断是否为文件  
            if (file.isFile()) {
            	// 为文件时调用删除文件方法
                return file.delete();
            }
            return flag;
        }  
    }
    /**
     * 保存文件
    *
    * @author: rucheng
    * @createTime: 2018年8月1日 下午3:33:02
    * @history:
    * @param filePath
    * @param file void
     */
    public static void saveFile(String filePath, MultipartFile file) {
		// 判断文件是否为空
		try {
			// 文件保存路径
			File uploadFile = new File(filePath);
			File fileParent = uploadFile.getParentFile();
			if (!fileParent.exists()) {
				fileParent.mkdirs();
			}
			// 转存文件
			file.transferTo(uploadFile);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

    /**
     * 读取文件文本
     * @param file
     * @return
     */
	public static String readFile(File file) {
        try (InputStreamReader streamReader = new InputStreamReader(new FileInputStream(file), "UTF-8");
             BufferedReader bufferedReader = new BufferedReader(streamReader)) {
            StringBuilder stringBuilder = new StringBuilder();
            String line;
            while ((line = bufferedReader.readLine()) != null) {
                stringBuilder.append(line);
            }
            return stringBuilder.toString();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }
	
	public static <T> void saveLog(List<T> list,String filepath,String prefix) throws IOException{
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH-mm-ss");
		String dirname = filepath+prefix+"\\";
		File parentfile = new File(dirname);
		if(!parentfile.exists()){//创建目录
			parentfile.mkdirs();
		}
		String filename = dirname+sdf.format(new Date())+".txt";
		File file = new File(filename);
		file.createNewFile();//创建文件
		FileOutputStream out = null;
		BufferedOutputStream bout = null;
		try {
			out = new FileOutputStream(file,true);
			bout = new BufferedOutputStream(out);
			for (int i = 0; i < list.size(); i++) {
				String content = list.get(i).toString();
				bout.write(content.getBytes());
			}
			
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally {
			if(bout!=null){
				bout.flush();
				bout.close();
			}
			if(out!=null){
				out.flush();
				out.close();
			}
		}
	}
}
